﻿using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using Tecnopez.Globals;
using BussinessLogicTecnoPez.AtencionCliente.Reclamos;
using BussinessLogicTecnoPez.Produccion.Enfermedades_y_control_de_estanques;
using System.Transactions;

public partial class Modules_AtencionCliente_Reclamos_Resoluciones : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        this.Title = "Resolucion de reclamo";

        popEmpleado.ObjType = typeof(Empleado);
        popEstado.ObjType = typeof(EstadoReclamo);


        if (!IsPostBack)
        {
            procesarParametroReclamo();
            procesarParametroResolucion();
        }


    }

    private void procesarParametroResolucion()
    {
        Int32 idResolucion;
        if (Request.QueryString["idResolucion"] != null)
        {

            if (Int32.TryParse(Request.QueryString["idResolucion"], out idResolucion))
            {
                ResolucionDeReclamo res = ResolucionDeReclamo.getManager.GetOneByPrimaryKey(idResolucion);
                if (res != null)
                {
                    popEmpleado.ItemSelected = res.Empleado;
                    txtMedidaTomada.Text = res.Resolucion;
                    dtFecha.Text = res.Fecha.ToShortDateString();
                    lblResolucion.Text = res.IdResolucionReclamo.ToString();
                    popEstado.ItemSelected = null;
                    miModo = PageMode.EditMode;
                    objResolucion = res;
                }
                else
                {
                    modoDeshabilitado();
                    Functions.MessageBox("No se pudó obtener la resolución por favor vuelva a intentarlo mas adelante.", this);
                }

            }
        }
        else
        {
            popEmpleado.ItemSelected = Functions.getEmpleadoLogueado(this);
            miModo = PageMode.NewMode;

        }
    }

    private ResolucionDeReclamo objResolucion
    {
        get
        {
            return ViewState["obResolucion"] as ResolucionDeReclamo;
        }
        set
        {
            ViewState["obResolucion"] = value;
        }
    }

    private Reclamo objReclamo
    {
        get
        {
            return ViewState["objReclamo"] as Reclamo;
        }
        set
        {
            ViewState["objReclamo"] = value;
        }
    }

    private void procesarParametroReclamo()
    {
        Int32 idReclamo;
        if (Request.QueryString["idReclamo"] == null ||
            !Int32.TryParse(Request.QueryString["idReclamo"], out idReclamo))
        {
            modoDeshabilitado();

            Functions.MessageBox("No se puede utilizar este formulario de esta forma por favor dirigase a la opcion gestión de reclamos.", this);
        }
        else
        {
            lblIDReclamo.Text = idReclamo.ToString();
            Reclamo rec = Reclamo.getManager.GetOneByPrimaryKey(idReclamo);
            if (rec != null)
            {
                lblEstadoReclamo.Text = rec.Estado.ToString();
                lblIDReclamo.Text = rec.IdReclamo.ToString();
                objReclamo = rec;
            }
            else
            {
                modoDeshabilitado();
                Functions.MessageBox("El reclamo que intenta asociar no esta en la base de datos.", this);
            }
        }
    }

    private PageMode miModo
    {
        get
        {
            return (PageMode)ViewState["miModo"];
        }
        set
        {
            ViewState["miModo"] = value;
        }
    }

    private void modoDeshabilitado()
    {
        miModo = PageMode.ModeNotFound;
        cmdAceptar.Visible = false;
        cmdCancelar.Visible = false;
        popEmpleado.Enable = false;
        popEstado.Enable = false;
    }
    protected void cmdAceptar_Click(object sender, EventArgs e)
    {
        if (IsValid)
        {
            DateTime fecha;
            if (DateTime.TryParse(dtFecha.Text, out fecha))
            {
                if (miModo == PageMode.NewMode)
                {
                    ResolucionDeReclamo res;
                    res = new ResolucionDeReclamo();
                    fecha = obtenerDatosDesdeLaInterfaz(fecha, res);
                    using (TransactionScope transaccion = new TransactionScope())
                    {
                        if (ResolucionDeReclamo.getManager.Insert(res))
                        {
                            if (Reclamo.getManager.Update(objReclamo))
                            {
                                transaccion.Complete();
                                this.ClientScript.RegisterClientScriptBlock(
                                                this.GetType(),
                                                "nickinScript2",
                                                "window.opener.Load(); window.close();",
                                                true);
                            }
                            else
                            {
                                Functions.MessageBox("No se pudo modificar el estado del reclamo, la transacción no pudo completarse.", this);
                            }
                        }
                        else
                        {
                            Functions.MessageBox("No se puede registrar la resolucion del reclamo.", this);
                        }
                    }

                }
                else if (miModo == PageMode.EditMode)
                {
                    ResolucionDeReclamo res = ResolucionDeReclamo.getManager.GetOneByPrimaryKey(Convert.ToInt32(lblResolucion.Text));
                    if (res != null)
                    {
                        obtenerDatosDesdeLaInterfaz(fecha, res);
                        using (TransactionScope transaccion = new TransactionScope())
                        {
                            if (ResolucionDeReclamo.getManager.Update(res))
                            {
                                if (Reclamo.getManager.Update(objReclamo))
                                {
                                    transaccion.Complete();
                                    this.ClientScript.RegisterClientScriptBlock(
                                                    this.GetType(),
                                                    "nickinScript2",
                                                    "window.opener.Load(); window.close();",
                                                    true);
                                }
                                else
                                {
                                    Functions.MessageBox("No se pudo modificar el estado del reclamo, la transacción no pudo completarse.", this);
                                }
                            }
                            else
                            {
                                Functions.MessageBox("No se puede registrar la resolucion del reclamo.", this);
                            }
                        }
                    }
                    else
                    {
                        Functions.MessageBox("La resolución seleccionada no puede ser editada en este momento.", this);
                    }

                }
                else
                {
                    modoDeshabilitado();
                    Functions.MessageBox("Error", this);
                }
            }
            else
            {
                Functions.MessageBox("La fecha no es un campo opcional, por favor verifique que poseea un valor válido.", this);
            }
        }
        else
        {
            Functions.MessageBox("Por favor verifique los datos del formulario.", this);
        }
    }

    private DateTime obtenerDatosDesdeLaInterfaz(DateTime fecha, ResolucionDeReclamo res)
    {
        res.ReclamoAsociado = objReclamo;
        res.Empleado = popEmpleado.ItemSelected as Empleado;
        res.Fecha = fecha;
        res.Resolucion = txtMedidaTomada.Text;
        res.nuevoEstado = popEstado.ItemSelected as EstadoReclamo;
        objReclamo.Estado = popEstado.ItemSelected as EstadoReclamo;
        return fecha;
    }
    protected void cmdCancelar_Click(object sender, EventArgs e)
    {
        generarScriptDeCierreVentana();
    }

    private void generarScriptDeCierreVentana()
    {
        ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "cerrar", "window.close();", true);
    }


}
